// Copyright 2025 The Kubeflow Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package artifactclient

// ClientFake is a fake implementation of Client for testing
type ClientFake struct {
	artifacts           map[string]*ReadArtifactResponse
	readArtifactRequest *ReadArtifactRequest
	err                 error
}

// NewClientFake creates a new fake artifact client
func NewClientFake() *ClientFake {
	return &ClientFake{
		artifacts: make(map[string]*ReadArtifactResponse),
	}
}

// ReadArtifact implements the fake artifact reading
func (a *ClientFake) ReadArtifact(request *ReadArtifactRequest) (*ReadArtifactResponse, error) {
	if a.err != nil {
		return nil, a.err
	}
	a.readArtifactRequest = request
	return a.artifacts[request.String()], nil
}

// SetError sets an error to be returned by ReadArtifact
func (a *ClientFake) SetError(err error) {
	a.err = err
}

// StubArtifact stubs an artifact response for a given request
func (a *ClientFake) StubArtifact(request *ReadArtifactRequest, response *ReadArtifactResponse) {
	a.artifacts[request.String()] = response
}

// GetReadArtifactRequest returns the last artifact request made
func (a *ClientFake) GetReadArtifactRequest() *ReadArtifactRequest {
	return a.readArtifactRequest
}
